基本信息
通用路由封裝 (GRE)定義了在任意一種網路層協定上封裝任意一個其它網路層協定的協定。
在大多數常規情況下,系統擁有一個有效載荷(或負載)包,需要將它封裝並傳送至某個目的地。首先將有效載荷封裝在一個GRE 包中,然後將此GRE 包封裝在其它某協定中並進行轉發。此外發協定即為傳送協定。當IPv4 被作為GRE 有效載荷傳輸時,協定類型欄位必須被設定為0x800。當一個隧道終點拆封此含有 IPv4 包作為有效載荷的GRE 包時,IPv4 包頭中的目的地址必須用來轉發包,並且需要減少有效載荷包的TTL。值得注意的是,在轉發這樣一個包時,如果有效載荷包的目的地址就是包的封裝器(也就是隧道另一端),就會出現迴路現象。在此情形下,必須丟棄該包。當 GRE 包被封裝在IPv4 中時,需要使用IPv4 協定47。
GRE 下的網路安全與常規的IPv4 網路安全是較為相似的,GRE 下的路由採用IPv4 原本使用的路由,但路由過濾保持不變。包過濾要求防火牆檢查 GRE 包,或者在GRE 隧道終點完成過濾過程。在那些這被看作是安全問題的環境下,可以在防火牆上終止隧道。
GRE(Generic Routing Encapsulation,通用路由封裝)協定是對某些網路層協定(如IP 和IPX)的數據報文進行封裝,使這些被封裝的數據報文能夠在另一個網路層協定(如IP)中傳輸。GRE採用了Tunnel(隧道)技術,是VPN(Virtual Private Network)的第三層隧道協定。
Tunnel 是一個虛擬的點對點的連線,提供了一條通路使封裝的數據報文能夠在這個通路上傳輸,並且在一個Tunnel 的兩端分別對數據報進行封裝及解封裝。 一個X協定的報文要想穿越IP網路在Tunnel中傳輸,必須要經過加封裝與解封裝兩個過程。
報文格式
GRE 封裝後的報文格式為:
Delivery Header | GRE Header | Payload packet |
•Delivery Header:封裝的外部協定報文頭(如IP報文頭),即隧道所處網路的協定數據頭,是實現一種協定報文穿越另一種協定網路的傳輸工具。
•GRE Header:對數據報文進行封裝後加入的數據,包含GRE協定本身以及和負載協定有關的一些信息。
•Payload Packet:進入隧道之前的網路層數據報文,將作為隧道報文的有效負載,該報文的協定號將作為GRE頭部欄位中的ProtocolType欄位。GRE頭部信息具有如圖所示的結構。
一個最簡單的GRE頭部只有4個位元組,即在C、K、S等標誌們都為0的情況下,GRE頭部僅包含第0到31位的信息。前4個bit位都為標誌位,分別表示了頭部後來的欄位是否有效;ProtocolType欄位標識PayloadPacket的協定類型,一般情況下,該協定欄位與乙太網幀的類型欄位值相同。
需要封裝和傳輸的數據報文,稱之為淨荷(Payload),淨荷的協定類型為乘客協定(Passenger Protocol)。系統收到一個淨荷後,首先使用封裝協定(Encapsulation Protocol)對這個淨荷進行GRE 封裝,即把乘客協定報文進行了“包裝”,加上了一個GRE 頭部成為GRE 報文;然後再把封裝好的原始報文和GRE 頭部封裝在IP 報文中,這樣就可完全由IP 層負責此報文的前向轉發(Forwarding)。通常把這個負責前向轉發的IP 協定稱為傳輸協定(Delivery Protocol 或者Transport Protocol)。根據傳輸協定的不同,可以分為GRE over IPv4 和GRE over IPv6 兩種隧道模式。
封裝過程
1、 Router A 連線Group 1 的接口收到X 協定報文後,首先交由X 協定處理
2、X 協定檢查報文頭中的目的地址域來確定如何路由此包
3、 若報文的目的地址要經過Tunnel 才能到達,則設備將此報文發給相應的Tunnel 接口
4、 Tunnel 口收到此報文後進行GRE 封裝,在封裝IP 報文頭後,設備根據此IP 包的目的地址及路由表對報文進行轉發,從相應的網路接口傳送出去。
解封裝過程
解封裝過程和加封裝的過程相反。
1、 RouterB 從Tunnel 接口收到IP 報文,檢查目的地址
2、 如果發現目的地是本路由器,則RouterB 剝掉此報文的IP 報頭,交給GRE 協定處理(進行檢驗密鑰、檢查校驗和及報文的序列號等)
3、 GRE 協定完成相應的處理後,剝掉GRE 報頭,再交由X 協定對此數據報進行後續的轉發處理。
說明:GRE 收發雙方的加封裝、解封裝處理,以及由於封裝造成的數據量增加,會導致使用GRE 後設備的數據轉發效率有一定程度的下降。